package cn.mdmm.user.entity.type;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import org.mybatis.annotation.Table;

/**
 * 类名称：TypeInfo对象定义<br>
 * 类描述：新闻类别<br>
 * 类生产方式：工具自动生成代码<br>
 * 创建人：dengqiang<br>
 * 创建时间：2017-06-04 20:04:27<br>
 * 修改人： <br>
 * 修改时间：<br>
 * 修改备注：<br>
 * 
 * @version V1.0
 */

@Table(pkId = { "id" }, tabName = "TYPE_INFO", notColumn = { "childrenIds", "children" })
public class TypeInfoModel implements Serializable, Comparable<TypeInfoModel> {

	/** uid */
	private static final long serialVersionUID = 1L;
	/** id */
	private Integer id;
	/** 类型名称 */
	private String name;
	/** 类型英文名称 */
	private String englishName;
	/** 描述 */
	private String typeDesc;
	/** 父ID */
	private Integer pid;
	/** 状态 */
	private Integer status;
	/** 图标 */
	private String icon;
	/** 排序 */
	private Integer order;
	/** 创建时间 */
	private Date createTime;
	/** 修改时间 */
	private Date updateTime;
	/** 下属所有子类id集合 */
	private Set<Integer> childrenIds = new TreeSet<>();
	/** 子类 */
	private Set<TypeInfoModel> children = new TreeSet<>();

	/** 取得id */
	public Integer getId() {
		return id;
	}

	/** 设置id */
	public void setId(Integer id) {
		this.id = id;
	}

	/** 取得类型名称 */
	public String getName() {
		return name;
	}

	/** 设置类型名称 */
	public void setName(String name) {
		this.name = name;
	}

	/** 取得类型英文名称 */
	public String getEnglishName() {
		return englishName;
	}

	/** 设置类型英文名称 */
	public void setEnglishName(String englishName) {
		this.englishName = englishName;
	}

	/** 取得描述 */
	public String getTypeDesc() {
		return typeDesc;
	}

	/** 设置描述 */
	public void setTypeDesc(String typeDesc) {
		this.typeDesc = typeDesc;
	}

	/** 取得父ID */
	public Integer getPid() {
		return pid;
	}

	/** 设置父ID */
	public void setPid(Integer pid) {
		this.pid = pid;
	}

	/** 取得状态 */
	public Integer getStatus() {
		return status;
	}

	/** 设置状态 */
	public void setStatus(Integer status) {
		this.status = status;
	}

	/** 取得图标 */
	public String getIcon() {
		return icon;
	}

	/** 设置图标 */
	public void setIcon(String icon) {
		this.icon = icon;
	}

	/** 取得排序 */
	public Integer getOrder() {
		return order;
	}

	/** 设置排序 */
	public void setOrder(Integer order) {
		this.order = order;
	}

	/** 取得创建时间 */
	public Date getCreateTime() {
		return createTime;
	}

	/** 设置创建时间 */
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	/** 取得修改时间 */
	public Date getUpdateTime() {
		return updateTime;
	}

	/** 设置修改时间 */
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}

	public void setChildren(Set<TypeInfoModel> children) {
		this.children = children;
	}

	public List<Integer> getChildrenIds() {
		// 返回列表数据时 为了不返回多余的数据会把childrenIds清空
		if (childrenIds == null) {
			return null;
		} else {
			return new ArrayList<Integer>(childrenIds);
		}
	}

	public List<TypeInfoModel> getChildren() {
		// 返回列表数据时 为了不返回多余的数据会把children清空
		if (children == null) {
			return null;
		} else {
			return new ArrayList<TypeInfoModel>(children);
		}
	}

	public void setChildrenIds(Set<Integer> childrenIds) {
		this.childrenIds = childrenIds;
	}

	public void addChildren(TypeInfoModel newsTypeDto) {
		children.add(newsTypeDto);
	}

	public void addChildrenIds(Integer id) {
		childrenIds.add(id);
	}

	public void addChildrenIds(Collection<Integer> childrenIds) {
		this.childrenIds.addAll(childrenIds);
	}

	@Override
	public int compareTo(TypeInfoModel typeInfoModel) {
		return (this.getOrder() < typeInfoModel.getOrder() ? -1
				: (this.getOrder() == typeInfoModel.getOrder() ? 0 : 1));
	}
}